Navbar Configuration
Learn how to configure and customize the top navigation bar in Docusaurus.
Overview
The navbar is configured in docusaurus.config.js under the themeConfig.navbar section. It controls the main navigation menu at the top of your site.
Basic Structure
navbar: {
title: 'Home',
items: [
// Menu items go here
],
}
Menu Item Types
1. Dropdown Menu
Create a dropdown menu with multiple sub-items:
{
'type': 'dropdown',
'label': 'Code',
'position': 'left',
'items': [
{
'type': 'doc',
'docId': 'code/html/index',
'sidebarId': 'codeHtmlSidebar',
'label': 'HTML'
},
{
'type': 'doc',
'docId': 'code/css/index',
'sidebarId': 'codeCssSidebar',
'label': 'CSS'
}
]
}
2. Direct Link
Link directly to a page:
{
'to': '/blog',
'label': 'Blog',
'position': 'left'
}
3. Doc Link with Sidebar
Link to a document and activate its sidebar:
{
'type': 'doc',
'docId': 'wordpress/generatepress/index',
'sidebarId': 'wpGeneratepressSidebar',
'label': 'Generatepress'
}
Important Notes
Nested Dropdowns Not Supported
Docusaurus does not support nested dropdowns in the navbar. This will cause a build error:
// ❌ This will FAIL
{
'type': 'dropdown',
'label': 'Parent',
'items': [
{
'type': 'dropdown', // Nested dropdown - NOT ALLOWED
'label': 'Child',
'items': [...]
}
]
}
Workaround: Visual Grouping
You can use HTML items to create visual grouping:
{
'type': 'dropdown',
'label': 'Visual Editing',
'items': [
{ 'html': '<b style="color: #25c2a0;">GUIDELINES</b>', 'to': '#' },
{ 'type': 'doc', 'docId': 'design-editing/guidelines/web-design', 'label': 'Web Design' },
{ 'html': '<hr style="margin: 0.3rem 0;" />', 'to': '#' },
{ 'html': '<b style="color: #25c2a0;">PLATFORM</b>', 'to': '#' },
{ 'type': 'doc', 'docId': 'design-editing/platform/canva', 'label': 'Canva' }
]
}
Renaming Menu Items
To rename a menu item, simply change the label property:
// Before
{ 'label': 'My Documentation' }
// After
{ 'label': 'Home' }
Removing Menu Items
To remove a menu item, delete its entire object from the items array:
// Remove this entire block
{
'to': '/blog',
'label': 'Blog',
'position': 'left'
},
Best Practices
- Keep labels short - Long labels can break the layout on mobile devices
- Use consistent positioning - Most items should be
'position': 'left' - Link to index pages - Always use
/indexfor main section pages - Match sidebar IDs - Ensure
sidebarIdmatches the sidebar name insidebars.js
Common Issues
Menu Item Not Appearing
Problem: Added a menu item but it doesn't show up.
Solution: Check that:
- The document file exists at the specified
docIdpath - The sidebar ID exists in
sidebars.js - There are no syntax errors in the configuration
502 Bad Gateway After Changes
Problem: Site shows 502 error after navbar changes.
Solution:
- Check Docker logs:
sudo docker logs docusaurus --tail 50 - Look for missing document errors
- Verify all referenced files exist
- Restart container:
sudo docker restart docusaurus